package com.vhall.component.service.room;

import com.vhall.component.entity.common.CachePage;
import com.vhall.component.entity.rebroadcast.RebroadCastEntity;
import com.vhall.component.entity.room.dto.RoomsEntityDTO;
import com.vhall.component.entity.room.entity.RoomExtendsEntity;
import com.vhall.component.entity.room.entity.RoomJoinsEntity;
import com.vhall.component.entity.room.vo.BannedKickedRspVO;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 房间缓存服务
 *
 * @author yuanzh
 * @date 2021/9/17
 */
public interface RoomCacheService {

    /**
     * 缓存用户参会信息
     *
     * @param joinId 参会id
     */
    void cacheRoomJoins(Integer joinId);

    /**
     * 缓存用户参会信息
     *
     * @param roomId    房间id
     * @param accountId 用户id
     */
    void cacheRoomJoins(String roomId, Integer accountId);

    /**
     * 缓存参会信息
     *
     * @param roomJoins 参会信息
     */
    void cacheRoomJoins(RoomJoinsEntity roomJoins);

    /**
     * 获取缓存的参会信息
     *
     * @param roomId    房间id
     * @param accountId 参会用户id
     * @return 参会信息
     */
    RoomJoinsEntity getCachedRoomJoins(String roomId, Integer accountId);


    /**
     * 清除主持人参会信息
     *
     * @param roomId 房间Id
     */
    void clearHostRoomJoin(String roomId);

    /**
     * 缓存主持人参会信息
     *
     * @param entity 参会信息
     */
    void cacheHostRoomJoin(RoomJoinsEntity entity);

    /**
     * 获取主持人参会信息
     *
     * @param roomId 房间id
     * @return 主持人参会信息
     */
    RoomJoinsEntity getCachedHostRoomJoin(String roomId);

    /**
     * 缓存用户参会信息
     *
     * @param joinIds 参会Ids
     * @return 缓存成功数
     */
    int cacheRoomJoins(List<Integer> joinIds);

    /**
     * 缓存用户参会信息
     *
     * @param roomId     房间id
     * @param accountIds 用户ids
     * @return 缓存成功数
     */
    int cacheRoomJoins(String roomId, List<Integer> accountIds);

    /**
     * 缓存踢出用户参会信息
     *
     * @param roomId     房间id
     * @param accountIds 参会用户ids
     * @param isKicked   是否踢出
     */
    void cacheKickedJoin(String roomId, List<Integer> accountIds, boolean isKicked);

    /**
     * 缓存禁言用户参会信息
     *
     * @param roomId     房间id
     * @param accountIds 参会用户ids
     * @param isBanned   是否禁言
     */
    void cacheBannedJoin(String roomId, List<Integer> accountIds, boolean isBanned);

    /**
     * 分页获取踢出列表
     *
     * @param roomId   房间id
     * @param page     页码
     * @param pageSize 条数
     * @return 数据
     */
    CachePage<BannedKickedRspVO> listKickedCache(String roomId, Integer page, Integer pageSize);

    /**
     * 分页获取禁言列表
     *
     * @param roomId   房间id
     * @param page     页码
     * @param pageSize 条数
     * @return 数据
     */
    CachePage<BannedKickedRspVO> listBannedCache(String roomId, Integer page, Integer pageSize);

    /**
     * 获取已缓存的上麦中的用户id列表
     *
     * @param roomId 房间id
     * @return 用户id列表
     */
    Set<Integer> listCachedWaitingForWheatAccountId(String roomId);

    /**
     * 获取缓存的房间暖场信息
     *
     * @param room 房间信息
     * @return 暖场信息
     */
    Map<String, Object> getCachedRoomWarmInfo(RoomsEntityDTO room);


    /**
     * 获取活动转播拉流记录
     *
     * @param roomId 房间id
     * @return 活动转播拉流记录
     */
    RebroadCastEntity getRebroadCache(String roomId);

    /**
     * 缓存活动转播拉流记录
     *
     * @param rebroadCastEntity 活动转播拉流记录
     */
    void cacheRebroad(RebroadCastEntity rebroadCastEntity);

    /**
     * 获取缓存的房间扩展信息
     *
     * @param roomId 房间id
     * @return 房间扩展信息
     */
    RoomExtendsEntity getRoomExtendCache(String roomId);

    /**
     * 缓存房间扩展信息
     *
     * @param roomExtendsEntity 房间扩展信息
     */
    void cacheRoomExtend(RoomExtendsEntity roomExtendsEntity);
}
